package com.eltsistemas.controller.rescisao;

import java.text.ParseException;
import java.util.Calendar;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.eltsistemas.adapter.Calendario;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Desligamento;
import com.eltsistemas.modelo.Funcionario;

@Controller
@RequestMapping("/rescisao")
public class RescisaoAltera {
	
	@RequestMapping(value="/alterado", method=RequestMethod.POST)
	public String cadastro(Desligamento desligamento, String dtDemissao, String nomeFuncionario, 
							String mot) throws ParseException
	{
		try
		{
			//Iniciando conexao a abrindo uma transacao
			Session session = new HibernateUtil().getSession();
			session.beginTransaction();
			
			GenericDao<Funcionario> daoFuncionario = new GenericDao<>(session, Funcionario.class);
			
			//Carrega o objeto
			Funcionario funcionario = daoFuncionario.findByName(nomeFuncionario);
			
			//Cria o objeto calendario
			Calendario calendario = new Calendario();
			Calendar data_Demissao = calendario.getData( dtDemissao );
			
			//Atualizando os dados do objeto
			funcionario.setSituacao("Desligado");
			desligamento.setFuncionario(funcionario);
			desligamento.setDataDemissao(data_Demissao);
			
			if(desligamento.getMotivo().equals("outros"))
			{
				desligamento.setMotivo(mot);
			}
			
			if(calendario.compare_Data(data_Demissao, funcionario.getDataAdmissao()) == true)
			{
				//Atualiza o objeto funcionario com situacao=Desligado
				funcionario.setSituacao("Desligado");
			
				//Salva o objeto na session
				session = daoFuncionario.altera(funcionario);
			}
			
			GenericDao<Desligamento> daoDesligamento = new GenericDao<>(session, Desligamento.class);
			
			/*Salvando objeto no session, comitando os dados no banco e
			 * finalizando a conexao
			*/
			session = daoDesligamento.altera(desligamento);	
			session.beginTransaction().commit();
			session.close();
		
			return "redirect:lista?nomeFuncionario="+nomeFuncionario;	
		}
		catch(HibernateException e)
		{
			return "redirect:/painel/erro";
		}	
	}
}
